SFTP feature polish - #1
Merged
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
Polishes the SFTP workspace experience by improving navigation (path editing), adding desktop drag-and-drop uploads, enhancing permission handling (symbolic + special bits), and strengthening transfer behavior with timestamp preservation and integration coverage.
Changes:
- Add desktop drag-and-drop upload support and short-lived directory listing caching in the SFTP pane, plus direct path entry.
- Introduce symbolic permission parsing/rendering (including setuid/setgid/sticky) and update UI + tests accordingly.
- Add opt-in Docker-based SFTP integration fixture and a comprehensive SFTP integration test (chmod, timestamps, recursive transfers, overwrite, failures).
Reviewed changes
Copilot reviewed 27 out of 33 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| windows/flutter/generated_plugins.cmake | Registers desktop_drop plugin for Windows builds. |
| windows/flutter/generated_plugin_registrant.cc | Adds desktop_drop plugin registration on Windows. |
| linux/flutter/generated_plugins.cmake | Registers desktop_drop plugin for Linux builds. |
| linux/flutter/generated_plugin_registrant.cc | Adds desktop_drop plugin registration on Linux. |
| macos/Flutter/GeneratedPluginRegistrant.swift | Registers desktop_drop plugin on macOS. |
| macos/Podfile.lock | Updates CocoaPods lockfile for new/updated Flutter plugins. |
| macos/Runner/DebugProfile.entitlements | Removes iCloud/CloudKit entitlements from Debug/Profile configuration. |
| macos/Runner.xcworkspace/xcshareddata/swiftpm/Package.resolved | Removes workspace SwiftPM resolution file. |
| macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved | Removes project SwiftPM resolution file. |
| pubspec.yaml | Adds desktop_drop dependency. |
| pubspec.lock | Locks desktop_drop and new transitive deps. |
| lib/features/workspace/presentation/workspace_screen.dart | Imports desktop_drop for use by workspace part files. |
| lib/features/workspace/presentation/workspace_screen/sessions_tabs.dart | Adjusts _SftpPane keying to keep state stable across path changes. |
| lib/features/workspace/presentation/workspace_screen/sftp_pane.dart | Adds path editing UI, list caching, refresh bypass, and drag/drop upload enqueueing. |
| lib/features/workspace/presentation/workspace_screen/sftp_components.dart | Widen permissions column for symbolic permissions display. |
| lib/features/workspace/presentation/workspace_screen/file_path_helpers.dart | Adds dropped-item name sanitization helper; removes octal-only validation helper. |
| lib/features/sftp/domain/sftp_entry.dart | Implements octal normalization + symbolic parsing/rendering (incl. special bits). |
| lib/features/sftp/data/dartssh2_sftp_connection.dart | Preserves special permission bits; best-effort timestamp preservation on upload/download. |
| lib/l10n/app_en.arb | Updates permissions label/error text to mention symbolic format. |
| lib/l10n/app_ja.arb | Updates permissions label/error text to mention symbolic format. |
| lib/l10n/app_zh.arb | Updates permissions label/error text to mention symbolic format. |
| lib/l10n/generated/app_localizations.dart | Regenerates localization bindings reflecting updated strings. |
| lib/l10n/generated/app_localizations_en.dart | Regenerates English localization output. |
| lib/l10n/generated/app_localizations_ja.dart | Regenerates Japanese localization output. |
| lib/l10n/generated/app_localizations_zh.dart | Regenerates Chinese localization output. |
| test/workspace_smoke_test.dart | Extends smoke test to cover path entry, refresh bypass, and symbolic chmod UI flow. |
| test/workspace_smoke_test_fakes.dart | Adds SFTP list() call counters to verify caching behavior in tests. |
| test/features/sftp/domain/sftp_permissions_test.dart | Adds unit tests for octal normalization and symbolic permission parsing/rendering. |
| test/features/sftp/data/dartssh2_sftp_connection_test.dart | Extends mapping tests to validate symbolic permissions + special bits. |
| test/features/sftp/data/dartssh2_sftp_connection_integration_test.dart | Adds opt-in integration test exercising chmod, timestamps, transfers, overwrite, failures. |
| test/fixtures/sftp/README.md | Documents how to run the local SFTP fixture and opt-in tests. |
| test/fixtures/sftp/Dockerfile | Adds Debian OpenSSH server fixture image for integration testing. |
| test/fixtures/sftp/docker-compose.yml | Adds compose service exposing fixture on localhost port 2222. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Complete SFTP browser, file views, path